package Exercise;


import java.util.Arrays;
import java.util.List;


class Solution3 {
    public static void merge(int[] nums1, int m, int[] nums2, int n) {
        //nums1的实际内存时m+n，m是有效元素的个数
        if(m==0) {
            for(int i=0;i<n;i++) {
                nums1[i]=nums2[i];
            }
        }
        //定义两个指针，分别指向nums1和nums2，比较大小
        int ord1=0,ord2=0;
        int[] arr=new int[m+n];
        int ord=0;
        while(ord1<m && ord2<n ) {
            if(nums1[ord1]<=nums2[ord2]) {
                arr[ord++]=nums1[ord1++];
            } else {
                arr[ord++]=nums2[ord2++];
            }
        }
        while(ord1<m) {
            arr[ord++]=nums1[ord1++];
        }
        while(ord2<n) {
            arr[ord++]=nums2[ord2++];
        }
        for(int i=0;i<ord;i++) {
            nums1[i]=arr[i];
        }
        System.out.println(Arrays.toString(arr));
    }

    public static void main(String[] args) {
        int[] nums1=new int[6];
        int[] nums2=new int[]{1};
        merge(nums1,0,nums2,1);
    }
}


class Solution2 {
    public static int removeDuplicates(int[] nums) {
        //将数组中重复的元素只留下第一个，其余的都去掉或移到后面，返回精简的数组的个数
        //定义一个新数组，遍历原数组，每个元素只存一份，最后将数组复制到原数组
        int[] arr=new int[nums.length];
        int order=0;//新数组的遍历下标
        if(nums[0]==0)order=1;
        boolean flg=true;
        for(int i=0;i<nums.length;i++) {
            flg=true;
            for(int j=0;j<order;j++) {
                if(nums[i]==arr[j]) {
                    flg=false;
                    break;
                }
            }
            if(flg)arr[order++]=nums[i];
        }
//        System.out.println(Arrays.toString(arr));
        for(int i=0;i<order;i++) {
            nums[i]=arr[i];//将新数组赋值给原数组
        }
//        System.out.println(Arrays.toString(nums));
        return order;
    }

    public static void main(String[] args) {
        int[] arr=new int[]{1,1,2};
        System.out.println(removeDuplicates(arr));
    }
}

class Solution1 {
    public static int removeElement(int[] nums, int val) {
        //将值为val的元素移动到前k个位置之后，前k个元素顺序任意，k是值不等于val的元素的个数
        //定义两个下标，left和right
        int left=0,right=nums.length-1;
        //left匹配不等于val的值，right匹配等于val的值，匹配到了就交换，否则left++，right--；
        while(left<right) {
            if(nums[left]==val) {
                if(nums[right]!=val) {
                    //满足要求，交换
                    int tmp=nums[left];
                    nums[left]=nums[right];
                    nums[right]=tmp;
                }
                else if(nums[right]==val)right--;
            } else if( nums[left]!=val) {
                left++;
            }
        }
//        System.out.println(Arrays.toString(nums));
        int num=0;
        for(int i=0;i<nums.length;i++) {
            if(nums[i]!=val)num++;
        }
        return num;
    }

    public static void main(String[] args) {
        int[] arr=new int[]{0,1,2,2,3,0,4,2};
        System.out.println(removeElement(arr,2));
    }
}

public class Test {
}
